From 63ec149d4004477e7cccb6f47bccfa29e9165a60 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 4 Aug 2010 17:10:46 +0100 Subject: [PATCH] numa: Small tweaks to domain_update_node_affinity() and its callers. From: Andrew Jones Signed-off-by: Keir Fraser --- xen/common/domain.c | 4 ---- xen/common/schedule.c | 11 +++++++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/xen/common/domain.c b/xen/common/domain.c index 568c0a8acd..9a93767630 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -358,12 +358,8 @@ void domain_update_node_affinity(struct domain *d) cpus_or(cpumask, cpumask, v->cpu_affinity); for_each_online_node ( node ) - { if ( cpus_intersects(node_to_cpumask(node), cpumask) ) node_set(node, nodemask); - else - node_clear(node, nodemask); - } d->node_affinity = nodemask; spin_unlock(&d->node_affinity_lock); diff --git a/xen/common/schedule.c b/xen/common/schedule.c index 9d2abba8b7..e118a72f73 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -270,13 +270,13 @@ int sched_move_domain(struct domain *d, struct cpupool *c) SCHED_OP(VCPU2OP(v), destroy_vcpu, v); cpus_setall(v->cpu_affinity); - domain_update_node_affinity(d); v->processor = new_p; v->sched_priv = vcpu_priv[v->vcpu_id]; evtchn_move_pirqs(v); new_p = cycle_cpu(new_p, c->cpu_valid); } + domain_update_node_affinity(d); d->cpupool = c; SCHED_OP(DOM2OP(d), free_domdata, d->sched_priv); @@ -458,6 +458,7 @@ int cpu_disable_scheduler(unsigned int cpu) struct vcpu *v; struct cpupool *c; int ret = 0; + bool_t affinity_broken; c = per_cpu(cpupool, cpu); if ( c == NULL ) @@ -468,6 +469,8 @@ int cpu_disable_scheduler(unsigned int cpu) if ( d->cpupool != c ) continue; + affinity_broken = 0; + for_each_vcpu ( d, v ) { vcpu_schedule_lock_irq(v); @@ -478,7 +481,7 @@ int cpu_disable_scheduler(unsigned int cpu) printk("Breaking vcpu affinity for domain %d vcpu %d\n", v->domain->domain_id, v->vcpu_id); cpus_setall(v->cpu_affinity); - domain_update_node_affinity(d); + affinity_broken = 1; } if ( v->processor == cpu ) @@ -501,7 +504,11 @@ int cpu_disable_scheduler(unsigned int cpu) if ( v->processor == cpu ) ret = -EAGAIN; } + + if ( affinity_broken ) + domain_update_node_affinity(d); } + return ret; } -- 2.30.2